Ejercicios Weak Ties & Random Networks

Ejercicios básicos de redes

Ejercicio Clustering Coeficient

Calcule el coeficiente de clustering para cada nodo y en la red (sin dirección)


In [5]:
edges = set([(1,2), (2,3), (2,4), (2,5), (4,5), (4,6), (5,6), (4,7)])

In [21]:
def get_vecinos(nodo):
    vecinos = set() #Se crea un conjunto vacio para vecinos
    for f,t in edges:
        if f == nodo:
            vecinos.add(t)
        if t == nodo:
            vecinos.add(f)
    return vecinos

vecinos = get_vecinos(2)
N = len(vecinos)
posibles_links_entre_vecinos = N*(N-1)/2
posibles_links_entre_vecinos


Out[21]:
6.0

In [24]:
nodos = set()
for f,t in edges:
    nodos.add(f)
    nodos.add(t)
    
nodos


Out[24]:
{1, 2, 3, 4, 5, 6, 7}

In [26]:
vecinos
(1,2) in edges


Out[26]:
True

In [34]:
#Numero de enlaces reales entre los vecinos
def get_links_vecinos(vecinos):
    enlaces_vecinos = 0
    for v in vecinos:
        for i in vecinos:
            if (v,i) in edges:
                enlaces_vecinos = enlaces_vecinos+1
    return enlaces_vecinos

In [38]:
# obtener coeficiente de clustering
def get_clustering_coeficient(nodo):
    numero_vecinos = get_vecinos(nodo)
    enlaces_entre_vecinos = get_links_vecinos(numero_vecinos)
    if len(numero_vecinos) == 1:
        ci = 0
    else:
        ci = (2*enlaces_entre_vecinos)/(len(numero_vecinos)*(len(numero_vecinos)-1))
    return ci
get_clustering_coeficient(2)


Out[38]:
0.16666666666666666

In [42]:
# Obtener coeficiente de clustering para todos los nodos
for j in nodos:
    coeficiente = get_clustering_coeficient(j)
    print("para el nodo: "+ str(j) + " El coeficiente de clustering es: " + str(coeficiente))


para el nodo: 1 El coeficiente de clustering es: 0
para el nodo: 2 El coeficiente de clustering es: 0.16666666666666666
para el nodo: 3 El coeficiente de clustering es: 0
para el nodo: 4 El coeficiente de clustering es: 0.3333333333333333
para el nodo: 5 El coeficiente de clustering es: 0.6666666666666666
para el nodo: 6 El coeficiente de clustering es: 1.0
para el nodo: 7 El coeficiente de clustering es: 0

Ejercicio Weigthed Netwroks

Cree una red no direccionada con los siguientes pesos.

(a, b) = 0.3 (a, c) = 1.0 (a, d) = 0.9 (a, e) = 1.0 (a, f) = 0.4 (c, f) = 0.2 (b, h) = 0.2 (f, j) = 0.8 (f, g) = 0.9 (j, g) = 0.6 (g, k) = 0.4 (g, h) = 0.2 (k, h) = 1.0


In [65]:
import matplotlib
%matplotlib inline
import networkx as nx
#edges = set([('a','b'), ('a','c'), ('a','d'), ('a','e'), ('a','f'), ('c','f'), ('b','h'), ('f','j'), ('f','g'), ('j','g'), ('g','k'), ('g','h'), ('k','h')])

G = nx.Graph()
G.add_weighted_edges_from([('a','b',0.3),('a','c',1),('a','d',0.9),('a','e',1),('a','f',0.4),('c','f',0.2),('c','f',0.2),('b','h',0.2),('f','j',0.8),('f','g',0.9),('j','g',0.6),('g','k',0.4),('g','h',0.2),('k','h',1)])
nx.draw_networkx(G)



In [66]:
G.size(weight='weight')


Out[66]:
7.9

Imprima la matriz de adyasencia


In [67]:
A = nx.adjacency_matrix(G)
print(A.todense())


[[ 0.   0.3  1.   0.9  1.   0.4  0.   0.   0.   0. ]
 [ 0.3  0.   0.   0.   0.   0.   0.2  0.   0.   0. ]
 [ 1.   0.   0.   0.   0.   0.2  0.   0.   0.   0. ]
 [ 0.9  0.   0.   0.   0.   0.   0.   0.   0.   0. ]
 [ 1.   0.   0.   0.   0.   0.   0.   0.   0.   0. ]
 [ 0.4  0.   0.2  0.   0.   0.   0.   0.8  0.9  0. ]
 [ 0.   0.2  0.   0.   0.   0.   0.   0.   0.2  1. ]
 [ 0.   0.   0.   0.   0.   0.8  0.   0.   0.6  0. ]
 [ 0.   0.   0.   0.   0.   0.9  0.2  0.6  0.   0.4]
 [ 0.   0.   0.   0.   0.   0.   1.   0.   0.4  0. ]]

Ejercicio Weak & Strong ties

Con la misma red anterior asuma que un link debil es inferior a 0.5, cree un código que calcule si se cumple la propiedad "strong triadic closure"


In [ ]:

Cambie un peso de los links anteriores para que se deje de cumplir la propiedad y calcule si es cierto. Explique.


In [ ]:

Escriba un código que detecte puntes locales y que calcule el span de cada puente local


In [ ]:

Ejercicio Random Networks

genere 1000 redes aleatorias N = 12, p = 1/6 y grafique la distribución del número de enlaces


In [ ]:

Grafique la distribución del promedio de grados en cada una de las redes generadas del ejercicio anterior


In [ ]:

Haga lo mismo para redes con 100 nodos


In [ ]:


In [ ]:

Ejercicio Random Networks - Componente Gigante

Grafique como crece el tamaño del componente más grande de una red aleatoria con N=100 nodos y diferentes valores de p

(grafique con promedio de grado entre 0 y 4 cada 0.05)


In [ ]:

Grafique cuál es el porcentaje de nodos del componente más grande para diferentes valores de p


In [ ]:

Identifique para que valores de p el componente mas grande esta totalmente interconectado


In [ ]: